<?php


namespace App\Http\Controllers\Api;


use App\Services\RuleService;
use Illuminate\Http\Request;

class RuleController extends BaseController
{

    /**
     * @api {post} api/rule/store 01、创建节点
     * @apiName Store-Rule
     * @apiGroup 04-Rule
     * @apiVersion 1.0.0
     *
     * @apiParam {String} rule_name 节点名称
     * @apiParam {Number} pid 上级主键
     * @apiParam {String} uri 默认路径
     * @apiParam {Number} [sort=50] 排序数值（升序）
     * @apiParam {Number{0,1}} [status=1] 可用状态 0:停用 1:正常
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Params} [data.other] 其他参照模块【04-02】接口响应参数
     *
     * @param Request $request
     * @param RuleService $service
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function store(Request $request, RuleService $service) {
        return $service->store($request->input());
    }

    /**
     * @api {get} api/rule/info/{id} 02、节点信息
     * @apiName Show-Rule
     * @apiGroup 04-Rule
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 节点主键【rule_id】
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Number} data.rule_id 节点主键
     * @apiSuccess {String} data.rule_name 节点名称
     * @apiSuccess {Number} data.pid 上级主键
     * @apiSuccess {String} data.uri 默认路径
     * @apiSuccess {Number} data.sort 排序数值（升序）
     * @apiSuccess {Number} data.status 可用状态 0:停用 1:正常
     * @apiSuccess {DateTime} data.created_at 数据创建时间
     *
     * @param RuleService $service
     * @param $id
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function show(RuleService $service, $id) {
        return $service->show($id);
    }

    /**
     * @api {post} api/rule/update/{id} 03、更新节点
     * @apiName Update-Rule
     * @apiGroup 04-Rule
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 节点主键【rule_id】
     * @apiParam {String} [rule_name] 节点名称
     * @apiParam {Number} [pid] 上级主键
     * @apiParam {String} [uri] 默认路径
     * @apiParam {Number} [sort=50] 排序数值（升序）
     * @apiParam {Number{0,1}} [status=1] 可用状态 0:停用 1:正常
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Params} [data.other] 其他参照模块【04-02】接口响应参数
     *
     * @param Request $request
     * @param RuleService $service
     * @param $id
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function update(Request $request, RuleService $service, $id) {
        return $service->update($id, $request->input());
    }

    /**
     * @api {delete} api/rule/destroy/{id} 04、删除节点
     * @apiName Destroy-Rule
     * @apiGroup 04-Rule
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 节点主键【rule_id】
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @param RuleService $service
     * @param $id
     * @return bool|mixed|null
     * @throws \Exception
     */
    public function destroy(RuleService $service, $id) {
        return $service->destroy($id);
    }

    /**
     * @api {get} api/rule/lists 05、节点列表
     * @apiName Index-Rule
     * @apiGroup 04-Rule
     * @apiVersion 1.0.0
     *
     * @apiParam {String{lists,tree}} [format=tree] 数据结构 lists:列表 tree:树状
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Number} data.rule_id 节点主键
     * @apiSuccess {String} data.rule_name 节点名称
     * @apiSuccess {Number} data.pid 上级主键
     * @apiSuccess {String} data.uri 默认路径
     * @apiSuccess {Number} data.sort 排序数值（升序）
     * @apiSuccess {Number} data.status 可用状态 0:停用 1:正常
     * @apiSuccess {DateTime} data.created_at 数据创建时间
     *
     * @apiSuccess {Array} [data.children] 子级节点数据集 注：没有子级时该字段不存在
     *
     * @param Request $request
     * @param RuleService $service
     * @return array
     */
    public function lists(Request $request, RuleService $service) {
        return $service->lists($request->query());
    }
}
